---
title: General Specifications
---



{/* 
  CONTRIBUTOR NOTE:
  ----------------
  This is a legacy document that is being deprecated.
  Please DO NOT make changes to this version.
  All updates should be directed to the new version at:
  /plugin-dev-en/0411-general-specifications
*/}

<Card title="This Documentation is Being Deprecated" icon="circle-exclamation" href="/plugin-dev-en/0411-general-specifications">
  <p>This page is being phased out as part of our documentation reorganization.</p>
  
  <p><strong>Click this card</strong> to be redirected to the updated version with the most current information.</p>
  
  <p>If you notice any discrepancies or areas needing improvement in the new documentation, please use the "Report an issue" button at the bottom of the page.</p>
</Card>

This article will briefly introduce common structures in plugin development.

### **Path Specifications**

When specifying file paths in Manifest or any yaml files, follow these two rules based on file types:

* For multimedia files like images or videos (e.g., plugin `icon`), place them in the `_assets` folder under the plugin root directory.
* For regular text files like `.py` or `.yaml`, use the absolute path within the plugin project.

### **Common Structures**

When defining plugins, some data structures can be shared among tools, models, and Endpoints. Here are these shared structures.

#### **I18nObject**

`I18nObject` is an internationalization structure compliant with IETF BCP 47 standard, currently supporting four languages:

* en\_US
* zh\_Hans
* ja\_Jp
* pt\_BR

#### **ProviderConfig**

`ProviderConfig` is a common provider form structure, applicable to both `Tool` and `Endpoint`

* `name` (string): Form item name
* `label` (I18nObject, required): Follows IETF BCP 47
* `type` (provider\_config\_type, required): Form type
* `scope` (provider\_config\_scope): Option range, varies with `type`
* `required` (bool): Cannot be empty
* `default` (any): Default value, only supports basic types `float` `int` `string`
* `options` (list\[provider\_config\_option]): Options, only used when type is `select`
* `helper` (object): Help documentation link label, follows IETF BCP 47
* `url` (string): Help documentation link
* `placeholder` (object): Follows IETF BCP 47

#### ProviderConfigOption(object)

* `value`(string, required)：values
* `label`(object, required)：comply with [IETF BCP 47](https://tools.ietf.org/html/bcp47)

#### ProviderConfigType(string)

* `secret-input` (string)：Configuration information will be encrypted
* `text-input`(string)：Plain text
* `select`(string)：drop-down box
* `boolean`(bool)：switchgear
* `model-selector`(object)：Model configuration information, including vendor name, model name, model parameters, etc.
* `app-selector`(object)：app id
* `tool-selector`(object)：Tool configuration information, including tool vendor, name, parameters, etc.
* `dataset-selector`(string)：TBD

#### ProviderConfigScope(string)

* When `type` is `model-selector`
  * `all`
  * `llm`
  * `text-embedding`
  * `rerank`
  * `tts`
  * `speech2text`
  * `moderation`
  * `vision`
* When `type` is `app-selector`
  * `all`
  * `chat`
  * `workflow`
  * `completion`
* When `type` is `tool-selector`
  * `all`
  * `plugin`
  * `api`
  * `workflow`

#### **ModelConfig**

* `provider` (string): Model provider name including plugin\_id, in the format of `langgenius/openai/openai`
* `model` (string): Specific model name
* `model_type` (enum): Model type enumeration, refer to this document

#### **NodeResponse**

* `inputs` (dict): Variables finally input to the node
* `outputs` (dict): Node output results
* `process_data` (dict): Data generated during node execution

#### **ToolSelector**

* `provider_id` (string): Tool provider name
* `tool_name` (string): Tool name
* `tool_description` (string): Tool description
* `tool_configuration` (dict\[str, Any]): Tool configuration information
* `tool_parameters` (dict\[str, dict]): Parameters requiring LLM inference
  * `name` (string): Parameter name
  * `type` (string): Parameter type
  * `required` (bool): Whether required
  * `description` (string): Parameter description
  * `default` (any): Default value
  * `options` (list\[string]): Available options

{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}

<CardGroup cols="2">
    <Card
        title="Edit this page"
        icon="pen-to-square"
        href="https://github.com/langgenius/dify-docs-mintlify/edit/main/en/plugins/schema-definition/general-specifications.mdx"
    >
        Help improve our documentation by contributing directly
    </Card>
    <Card
        title="Report an issue"
        icon="github"
        href="https://github.com/langgenius/dify-docs-mintlify/issues/new?title=Documentation%20Issue%3A%20al-specificati&body=%23%23%20Issue%20Description%0A%3C%21--%20Please%20briefly%20describe%20the%20issue%20you%20found%20--%3E%0A%0A%23%23%20Page%20Link%0Ahttps%3A%2F%2Fgithub.com%2Flanggenius%2Fdify-docs-mintlify%2Fblob%2Fmain%2Fen/plugins/schema-definition%2Fgeneral-specifications.mdx%0A%0A%23%23%20Suggested%20Changes%0A%3C%21--%20If%20you%20have%20specific%20suggestions%20for%20changes%2C%20please%20describe%20them%20here%20--%3E%0A%0A%3C%21--%20Thank%20you%20for%20helping%20improve%20our%20documentation%21%20--%3E"
    >
        Found an error or have suggestions? Let us know
    </Card>
</CardGroup>
